//
//  StatusTableViewCell.swift
//  Super_WeiBo
//
//  Created by 梁超 on 16/3/27.
//  Copyright © 2016年 lc. All rights reserved.
//

import UIKit
import SDWebImage
import KILabel

let SuperPicviewCellIdentifier = "SuperPicviewCellIdentifier"

/**
 保存cell的重用标识
 */
enum StatusTableViewCellIdentifier: String
{
    case NormalCell = "NormalCell"
    case ForwardCell = "ForwardCell"
    
    /**
     如果在枚举中利用 static修饰一个方法，相当于类中的class修饰方法(类方法)
     */
    static func cellID(status: Status) -> String
    {
        return status.retweeted_status != nil ? ForwardCell.rawValue : NormalCell.rawValue
    }
}

class StatusTableViewCell: UITableViewCell {

    /// 保存配图宽度约束
    var picWidthCons: NSLayoutConstraint?
    /// 保存配图高度约束
    var picHeightCons: NSLayoutConstraint?
    /// 保存配图顶部约束
    var picTopCons: NSLayoutConstraint?
    
    /// 微博模型
    var status: Status?{
        didSet{
            // 设置顶部视图数据
            topView.status = status
            // 设置正文内容
            contentLabel.attributedText = EmoticonPackage.emoticonString(status?.text ?? "")
            
            // 设置配图数据(判断是否有转发微博)
            picView.status = status?.retweeted_status != nil ? status?.retweeted_status : status
            // 根据模型设置配图尺寸
            let sizeArr = picView.calculateImageSize()
            
            // 设置配图尺寸
            picWidthCons?.constant = sizeArr.width
            picHeightCons?.constant = sizeArr.height
            picTopCons?.constant = sizeArr.height == 0 ? 0 : 10
        }
    }
    
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        // 初始化UI
        setupUI()
    }
    
    /**
     初始化UI
     */
    func setupUI()
    {
        // 添加子控件
        contentView.addSubview(topView)
        contentView.addSubview(contentLabel)
        contentView.addSubview(picView)
        contentView.addSubview(footerV)
        
        let width = UIScreen.mainScreen().bounds.width
        // 布局子控件
        topView.xmg_AlignInner(type: XMG_AlignType.TopLeft, referView: contentView, size: CGSize(width: width, height: 60))
        contentLabel.xmg_AlignVertical(type: XMG_AlignType.BottomLeft, referView: topView, size: nil, offset: CGPoint(x: 10, y: 10))
//        
//        // 布局配图
//        let cons = picView.xmg_AlignVertical(type: XMG_AlignType.BottomLeft, referView: contentLabel, size: CGSizeZero, offset: CGPoint(x: 0, y: 10))
//        // 获得配图 宽、高约束（以便进行更改）
//        picWidthCons = picView.xmg_Constraint(cons, attribute: NSLayoutAttribute.Width)
//        picHeightCons = picView.xmg_Constraint(cons, attribute: NSLayoutAttribute.Height)
        
        // 约束footer
        footerV.xmg_AlignVertical(type: XMG_AlignType.BottomLeft, referView: picView, size: CGSize(width: width, height: 44), offset: CGPoint(x: -10, y: 10))
    }
    /**
     用于获取行高
     */
    func rowHeight(status: Status) -> CGFloat
    {
        // 1.为了能够调用didSet, 计算配图的高度
        self.status = status
        
        // 2.强制更新界面
        self.layoutIfNeeded()
        
        // 3.返回底部视图最大的Y值
        return CGRectGetMaxY(footerV.frame)
    }
    
    // MARK: - 懒加载
    /// 顶部视图
    private lazy var topView: StatusTableViewTopView = StatusTableViewTopView()
    /// 微博正文
    lazy var contentLabel: UILabel = {
//       var l = UILabel.createLabel(UIColor.darkGrayColor(), fontSize: 14)
        var l = KILabel()
        l.textColor = UIColor.darkGrayColor()
        l.font = UIFont.systemFontOfSize(14)
        l.numberOfLines = 0
        l.preferredMaxLayoutWidth = UIScreen.mainScreen().bounds.width - 20
        l.urlLinkTapHandler = {
            (label, string, range)
            in
            print(string)
        }
        return l
    }()
    /// 配图约束
    private lazy var picLayout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    /// 配图
    lazy var picView: StatusPictureView = StatusPictureView()
    /// 底部工具条
    lazy var footerV : StatusTableViewBottomView = StatusTableViewBottomView()
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}



